
/**
 * Module dependencies.
 */

var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');
var app = express();
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
//var partials = require('express-partials');//应用ejs partials

var models = require('./routes/models');
var users = models.users;
var product = require('./routes/Product');
var mobileWeb = require('./routes/MobileWeb');
var assembly = require('./routes/Assembly');

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');//使用ejs模板
//app.use(partials());
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.bodyParser());
app.use(express.methodOverride());
//轻量级session存储在内存中
app.use(express.cookieParser());
app.use(express.session({secret: 'blog.fens.me', cookie: { maxAge: 60000 }}));

app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);////注意这个放置的顺序很重要，不要放在session之前，要放在session之后，否则会提示cannot set property 'name' of undefined 
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());  
}

app.get('/', routes.index);
//---------------------------------手机客户端---------------------------------------------------------------
app.post('/login',user.doLogin);//手机客户端登陆
app.get('/get',routes.get);//根据bc查询产品
app.post('/add',routes.saveData);//添加产品
app.post('/batchAdd',routes.batchSaveData);//批量添加
app.post('/update',routes.updateProduct);//修改产品信息
app.post('/addMr',routes.saveMr);//添加维修记录
app.post('/deleteMr',routes.deleteMr);//删除维修记录
app.post('/findCpByPara',routes.findCpByPara);//高级搜索
//----------------------------------手机浏览器-----------------------------------------------------------------
app.get('/prod/:barcode',mobileWeb.getWeb);//返回网页
app.post('/prod/doLogAndFindCp',mobileWeb.doLogAndFindCp);//查看更多信息
app.post('/prod/mobileAddMr',mobileWeb.mAddMr);//添加维修记录
app.post('/prod/mobileDeleteMr',mobileWeb.mobileDeleteMr);//删除维修记录
app.post('/prod/mobileSearchCp',mobileWeb.mobileSearchCp);//高级搜索
app.post('/prod/mobileCpInfo',mobileWeb.mobileCpInfo);//查询产品详情
app.post('/prod/mobileFindMr',mobileWeb.mobileFindMr);//查看返修记录
app.post('/prod/mobileFindAss',mobileWeb.mobileFindAss);//查看一个产品的所有组件
//--------------------------------WEB 后台--------------------------------------------------------------------
app.get('/getCpAll',product.getPcAll);//分页浏览产品信息
app.post('/getCpAllPost',product.getPcAll);//回调函数跳转
app.get('/addCpUi',product.addPcUi);//添加产品UI
app.post('/addCp',product.addPc);//添加产品
app.get('/batchAddCpUi',product.batchAddPcUi);//批量添加UI
app.post('/batchAddCp',product.batchAddPc);//批量添加
app.post('/deleteCpOne',product.deleteProductOne);//删除产品信息
app.post('/deleteCpBatch',product.deleteProductBatch);//批量删除产品信息
app.get('/getCpMore',product.getPcMore);//查看产品更多信息
app.post('/getCpMorePost',product.getPcMore);//Post 请求
app.get('/addMrUi',product.addMrUI);//添加维修记录UI
app.post('/addCpMr',product.addMr);//添加维修记录
app.post('/deleteMrOne',product.deleteMrOne);//删除返修记录
app.get('/updateCpOneUi',product.updateProductUi);//修改产品UI
app.post('/updateCpOne',product.updateProductOne);//修改产品
app.post('/makeBarcode',product.makeBarcode);//批量生成二维码
//---组件信息
app.get('/batchAddPaUi',assembly.batchAddPaUi);//批量添加组件UI
app.post('/batchAddPa',assembly.batchAddPa);//批量添加组件
app.get('/getPaAll',assembly.getPaAll);//查看所有组件
app.post('/getPaAllPost',assembly.getPaAll);
app.post('/batchDelPa',assembly.batchDelPa);//批量删除组件信息
app.post('/paInCp',assembly.paInCp);//组件与产品关联
app.post('/batchAddDs',assembly.batchAddDs);//批量添加部署地信息
app.post('/addDsOne',assembly.addDsOne);//添加一条部署地信息
app.post('/addPaRepairRecords',assembly.addPaRepairRecords);//对组件记录维修信息
app.get('/updatePaOneUi',assembly.updatePaOneUi);//修改产品组件UI
app.post('/updatePaOne',assembly.updatePaOne);//修改产品组件
app.get('/getPaMrs',assembly.getPaMrs);//查看返修记录
app.post('/getPaMrsPost',assembly.getPaMrs);
app.get('/addPamrUi',assembly.addPamrUi);//添加组件的维修记录UI
app.post('/addPaMr',assembly.addPaMr);//添加组件的维修记录
app.post('/deletePaMrOne',assembly.deletePaMrOne);//单条删除组件维修记录
//-------------------------------------------用户信息-----------------------------
app.get('/showUsers',user.getUserAll);
app.post('/showUsersPost',user.getUserAll);
app.get('/addUserUi',user.addUserUi);
app.post('/addUser',user.addUser);
app.post('/deleteUserOne',user.deleteUserOne);
app.get('/updateUserOneUi',user.updateUserOneUi);
app.post('/updateUser',user.updateUser);
app.get('/updatePwUI',user.updatePwUI);
app.post('/updatePw',user.updatePw);

//app.get('/test',assembly.test);
//app.get('/upds',assembly.batchUpdateDs);
//app.get('/gcp',assembly.getCpByPra);


passport.use('local', new LocalStrategy(
    function (username, password, done) {
            users.findOne({un : username,pw : password},function(err,user){
                if(err){return done(err);}
                if (!user) {
                    return done(null, false,{message : '用户名或密码错误！'});
                }
                return done(null,user);
            });
        }
));
passport.serializeUser(function (user, done) {//保存user对象
    done(null, user);//可以通过数据库方式操作
});

passport.deserializeUser(function (user, done) {//删除user对象
    users.findById(user._id,function(err,user){
        done(err,user);
    });
});

app.post('/webLogin',passport.authenticate('local',{
    successRedirect : '/users',
    failureRedirect : '/loginFailure'
}));//登录

app.get('/loginFailure',function(req,res){
    res.render('login',{message:'用户名或密码错误！'})
});

app.all('/users', isLoggedIn);
app.get('/users', user.list);
app.get('/logout', function (req, res) {
    req.logout();
    res.redirect('/');
});


http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

function isLoggedIn(req, res, next) {
    if (req.isAuthenticated())
        return next();
    res.redirect('/');
}
